const { MyPromise } = require('./MyPromise');

let promise = new MyPromise((resolve, reject) => {
    // setTimeout(()=> {
    //     resolve('成功');
    // }, 2000)
    reject('失败');
    // throw new Error('error catch!');
    // resolve('成功');
});

// promise.then(value => {
//     console.log(value);
// }, err => {
//     console.log(err);
// })

// promise.then(value => {
//     console.log(value);
// }, err => {
//     console.log(err);
// })

// promise.then(value => {
//     console.log(value);
// }, err => {
//     console.log(err);
// })

// function other() {
//     return new MyPromise((resolve, reject) => {
//         resolve('other');
//     })
// }

// // 链式调用测试
// promise.then(data => other()).then(x => {
//     console.log(x);
// })

// let test1 = promise.then(val => {
//     return test1;
// })

// promise.then(val => {
//     console.log(val);
//     // throw new Error('then error catch!');
//     return 'aaa';
// }, err => {
//     console.log(err, '-----');
//     // throw new Error('errr, +++');
// }).then(val => {
//     console.log(val, '888');
// }, err => {
//     console.log(err, '++++')
// })

// 状态传递测试

// promise.then().then().then(data => {
//     console.log(data);
// }, err => {
//     console.log(err);
// })

// all 方法测试

// function p1() {
//     return new MyPromise(function(resolve, reject){
//         setTimeout(function(){
//             resolve('p1');
//         }, 2000);
//     })
// }

function p2() {
    return new MyPromise(function(resolve, reject){
        // setTimeout(() => {
        //     resolve('p2');
        // }, 2000);
        reject('123');
    })
}


// MyPromise.all(['a', 'b', p1(), p2()]).then(result => {
//     console.log(result);
// })

// MyPromise.resolve(100).then(result => {
//     console.log(result);
// });

// MyPromise.resolve(p2()).then(result => {
//     console.log(result);
// });


// finally 测试

// promise.then(result => {
//     console.log(result);
// }, err => {
//     console.log(err);
// }).finally(() => {
//     console.log('必定执行');
// })

// p2().finally(() => {
//     console.log('必定执行');
// }).then(val => {
//     console.log(val);
// }, err => {
//     console.log(err);
// })


// catch 测试

p2().then(value => {
    console.log(value);
}).catch(reason => console.log(reason, '-----'));